#include <func.h>

struct array {
    int* elements;
    int n;
};

void* start_routine(void* args) 
{
    struct array* val = (struct array*)args;    
    for (int i = 0; i < val->n; i++) {
        printf("%d ", val->elements[i]);
    }
    printf("\n");
    return NULL;
}

int main(int argc, char* argv[])
{
    int arr[] = {9, 5, 2, 7, 1, 3, 4, 6, 8, 0};  // main线程的栈中
    struct array arg = {arr, 10};

    pthread_t tid;
    int err = pthread_create(&tid, NULL, start_routine, &arg);
    // pthread_create 返回后，到底是主线程先执行
    // 还是子线程限制性，这是不确定的。
    if (err) {
        fprintf(stderr, "pthread_create(): %s\n", strerror(err));
        exit(1);
    }

    printf("main thread: %lx created\n", tid);
    sleep(2);  // 让子线程执行完

    return 0;  // exit(0)
}

